package com.utils;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
import java.util.Objects;
import java.util.UUID;

/**
 * @ClassName UploadImage
 * @Description 图片上传工具类
 * @Author Kx
 * @Date 2025/6/9 9:55
 * @Version 1.0
 */
public class UploadImage {
    /**
     * @param imageFile : 图片文件
     * @return java.lang.String
     * @author: kx
     * @date: 2025/5/21 20:03
     * @description: 将上传的图片保存到服务器中, 并返回图片的访问路径
     */
    public static String uploadImage(MultipartFile imageFile, HttpServletRequest request) {
        if (imageFile.isEmpty()) {
            throw new IllegalArgumentException("图片不能为空");
        }

        // 校验图片格式
        if (!Objects.requireNonNull(imageFile.getContentType()).startsWith("image/")) {
            throw new IllegalArgumentException("上传的文件必须是图片");
        }
        // 获取项目存储图片路径
        String realPath = request.getServletContext().getRealPath("/images");

        // 指定存储目录
        File fileDir = new File(realPath);
        // 判断目录是否存在
        if (!fileDir.exists()) {
            // 创建目录
            fileDir.mkdirs();
        }
        // 获取图片名称
        String imageName = imageFile.getOriginalFilename();

        // 截取图片扩展名
        String extension = Objects.requireNonNull(imageName).substring(imageName.lastIndexOf("."));
        // 生成唯一图片名称
        String uniqueName = UUID.randomUUID() + extension;

        // 保存图片
        Path path = FileSystems.getDefault().getPath(fileDir.getAbsolutePath(), uniqueName);
        try {
            imageFile.transferTo(path);
        } catch (IOException e) {
            throw new RuntimeException("图片上传失败", e);
        }

        return uniqueName;
    }
}
